//
//  CZEmoticonKeyboard.swift
//  CZ29VVeibo
//
//  Created by apple on 16/7/4.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit

class CZEmoticonKeyboard: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: - 设置视图
    private func setupUI(){
        backgroundColor = UIColor(patternImage: UIImage(named: "emoticon_keyboard_background")!)
        // 01- 添加控件
        addSubview(toolbar)
        addSubview(pageView)
        addSubview(pageControl)
        // 02- 添加约束
        toolbar.snp_makeConstraints { (make) -> Void in
            make.leading.trailing.bottom.equalTo(self)
            make.height.equalTo(37)
        }
        
        pageView.snp_makeConstraints { (make) -> Void in
            make.leading.top.trailing.equalTo(self)
            make.bottom.equalTo(toolbar.snp_top)
        }
        
        pageControl.snp_makeConstraints { (make) -> Void in
            make.bottom.equalTo(pageView)
            make.centerX.equalTo(pageView)
        }
        
        // 接收toolbar中的哪个按钮点击
        toolbar.toolbarClosure = {[weak self] (type: CZEmoticonToolbarType) ->() in
            // 获取indexPath
            let indexPath = NSIndexPath(forItem: 0, inSection: type.rawValue)
            // 叫配图滚动指定位置
            self?.pageView.scrollToItemAtIndexPath(indexPath, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)
            
            
            // 总页数
            self?.pageControl.numberOfPages = CZEmoticonTools.sharedTools.allEmoticons[indexPath.section].count
            // 当前页数
            self?.pageControl.currentPage = 0

        }
        
    }
    
    // MARK: - 懒加载控件
    // 如果使用UIStackView 初始化 需要传入frame 如果我们使用约束frame 可以传入CGRectZero
    private lazy var toolbar: CZEmoticonToolbar = CZEmoticonToolbar(frame: CGRectZero)
    // 表情键盘
    private lazy var pageView: CZEmoticonPageView = {
        let view = CZEmoticonPageView()
        // 设置代理
        view.delegate = self
        // 取消弹簧效果
        view.bounces = false
        // 分页
        view.pagingEnabled = true
        // 隐藏滚动条
        view.showsHorizontalScrollIndicator = false
        view.showsVerticalScrollIndicator = false
        return view
    }()
    // pagecontrol
    private lazy var pageControl: UIPageControl = {
        let view = UIPageControl()
        // 总页数
        view.numberOfPages = CZEmoticonTools.sharedTools.allEmoticons[0].count
        // 当前页数
        view.currentPage = 0
//        // 默认的
//        view.pageIndicatorTintColor = UIColor(patternImage: UIImage(named: "compose_keyboard_dot_normal")!)
//        // 选中颜色
//        view.currentPageIndicatorTintColor = UIColor(patternImage: UIImage(named: "compose_keyboard_dot_selected")!)
        // 通过kvc赋值
        view.setValue(UIImage(named: "compose_keyboard_dot_normal"), forKey: "pageImage")
        view.setValue(UIImage(named: "compose_keyboard_dot_selected"), forKey: "currentPageImage")
        
        return view
    }()

}
//UICollectionViewDelegate
extension CZEmoticonKeyboard: UICollectionViewDelegate{
    /*
        - 计算方式 （只试用于我么cell和pageView 一样大）
        - 当前的pageView 界面上展示给用户最多两个cell
        - 相对于 pageView 左侧起点为O点 屏幕中心点x = 屏幕的宽度/ 2 + contentOffset.x
        - 由于cell贴在pageView 每个cell都有自己的frame
        - 如果我判断出 哪个cell的frame 包含我们屏幕的中心点 就代表他显示的多
        - 通过cell 和 pageView 得到indexPath
        - indexPath 的到section
        - section 0 1 2  viewWithTag  通过该方法 得到button  吧button状态发生改变
    */
    func scrollViewDidScroll(scrollView: UIScrollView) {
        // 获取相对于屏幕的中心点X
        let centerX = SCREENW / 2 + scrollView.contentOffset.x
        
        // 获取当前屏幕显示的cell 按照我们的意愿重新排序
        let cellArray = pageView.visibleCells().sort { (cell1, cell2) -> Bool in
            return cell1.frame.origin.x < cell2.frame.origin.x
        }
        
        
        // 如果屏幕显示的是两个cell时候我们才判断
        if cellArray.count == 2 {

            // 第一个cell
            let firstCell = cellArray.first!
            // 第二个cell
            let lastCell = cellArray.last!
            
            // 获取显示多的cell的indexPath
            var indexPath: NSIndexPath
            
            // 判断我们的中心点是否在第一个cell中 代表第一个cell显示的多
            if firstCell.frame.contains(CGPoint(x: centerX, y: 0)){
                indexPath = pageView.indexPathForCell(firstCell)!
            }else{
                // 最后一个显示的多
                indexPath = pageView.indexPathForCell(lastCell)!
            }
            
            // 滚动pageView 改变toolbar下面按钮的选中的状态
            toolbar.setCurrentButtons(indexPath.section)
            
            // 总页数
            pageControl.numberOfPages = CZEmoticonTools.sharedTools.allEmoticons[indexPath.section].count
            // 当前页数
            pageControl.currentPage = indexPath.item
            
        }
    }
}





